package es.efor.ics.gev.service.impl;

import es.efor.ics.gev.dao.LookupDao;
import es.efor.ics.gev.model.Accion;
import es.efor.ics.gev.model.Cargo;
import es.efor.ics.gev.model.Concepto;
import es.efor.ics.gev.model.Departamento;
import es.efor.ics.gev.model.LabelValue;
import es.efor.ics.gev.model.PerfilOrganizativo;
import es.efor.ics.gev.model.PerfilPersonal;
import es.efor.ics.gev.model.Role;
import es.efor.ics.gev.model.TipoAtributo;
import es.efor.ics.gev.model.TipoEvento;
import es.efor.ics.gev.model.TipoTitulacion;
import es.efor.ics.gev.model.Titulacion;
import es.efor.ics.gev.service.LookupManager;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

/**
 * Implementation of LookupManager interface to talk to the persistence layer.
 *
 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
 */
public class LookupManagerImpl implements LookupManager {
	@Autowired	
    LookupDao dao;

    /**
     * {@inheritDoc}
     */
    public List<LabelValue> getAllRoles() {
        List<Role> roles = dao.getRoles();
        List<LabelValue> list = new ArrayList<LabelValue>();

        for (Role role1 : roles) {
            list.add(new LabelValue(role1.getName(), role1.getName()));
        }

        return list;
    }

    /**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllDepartamentos() {
		List<Departamento> departamentos = dao.getDepartamentos();
		List<LabelValue> list = new ArrayList<LabelValue>();
				
		for(Departamento dep: departamentos ) {
			list.add(new LabelValue(dep.getNombreDepartamento(),
					dep.getId().toString()));
		}
		
		return list;
	}

	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllAcciones() {
		List<Accion> acciones = dao.getAcciones();
		List<LabelValue> list = new ArrayList<LabelValue>();
				
		for(Accion accion: acciones ) {
			list.add(new LabelValue(accion.getNombreAccion(),
					accion.getId().toString()));
		}
		
		return list;
	}

	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllTiposAtributo() {		
		List<TipoAtributo> tiposAtributo = dao.getTiposAtributo();
		List<LabelValue> list = new ArrayList<LabelValue>();

		for(TipoAtributo tipo:tiposAtributo) {
			list.add(new LabelValue(tipo.getNombreTipo(), tipo.getId().toString()));
		}
			
		return list;
	}

	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllPerfilesOrganizativos() {
		List<PerfilOrganizativo> perfilesOrganizativos = dao.getPerfilesOrganizativos();
		List<LabelValue> list = new ArrayList<LabelValue>();

		for (PerfilOrganizativo perfil:perfilesOrganizativos) {
			list.add(new LabelValue(perfil.getNombrePerfil(), perfil.getId().toString()));
		}
		
		return list;
	}

	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllPerfilesPersonales() {
		List<PerfilPersonal> perfilesPersonales = dao.getPerfilesPersonales();
		List<LabelValue> list = new ArrayList<LabelValue>();
		
		for (PerfilPersonal perfil:perfilesPersonales) {
			list.add(new LabelValue(perfil.getNombrePerfil(), perfil.getId().toString()));
		}
		
		return list;
	}

	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllTiposEvento() {
		List<TipoEvento> tipologias = dao.getTipologias();
		List<LabelValue> list = new ArrayList<LabelValue>();
		
		for (TipoEvento tipologia:tipologias) {
			list.add(new LabelValue(tipologia.getNombre(), tipologia.getId().toString()));
		}
		
		return list;
	}
	
	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllTiposTitulacion() {
		List<LabelValue> list = new ArrayList<LabelValue>();
		List<TipoTitulacion> tiposTitulacion = dao.getTiposTitulacion();
		
		for (TipoTitulacion tipoTitulacion:tiposTitulacion) {
			list.add(new LabelValue(tipoTitulacion.getNombreTipo(), tipoTitulacion.getId().toString()));
		}
		
		return list;
	}
	
	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllTitulaciones() {
		List<LabelValue> list = new ArrayList<LabelValue>();
		List<Titulacion> titulaciones = dao.getTitulaciones();
		
		for (Iterator<Titulacion> iterator = titulaciones.iterator(); iterator.hasNext();) {
			Titulacion titulacion = (Titulacion) iterator.next();
			list.add(new LabelValue(titulacion.getNombreTitulacion(), titulacion.getId().toString()));
		}
		return list;
	}
	
	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllCargos() {
		List<LabelValue> list = new ArrayList<LabelValue>();
		List<Cargo> cargos = dao.getCargos();
		
		for (Iterator<Cargo> iterator = cargos.iterator(); iterator.hasNext();) {
			Cargo cargo = (Cargo) iterator.next();
			list.add(new LabelValue(cargo.getNombreCargo(), cargo.getId().toString()));
		}
		
		return list;
	}
	
	/**
     * {@inheritDoc}
     */
	public List<LabelValue> getAllConceptosGasto() {
		List<LabelValue> list = new ArrayList<LabelValue>();
		List<Concepto> conceptosGasto = dao.getConceptosGasto();
		
		for (Iterator iterator = conceptosGasto.iterator(); iterator.hasNext();) {
			Concepto concepto = (Concepto) iterator.next();
			list.add(new LabelValue(concepto.getConcepto(), concepto.getId().toString()));
		}
		
		return list;
	}
	
}
